#ifndef BCDIDO_THREAD_H
#define BCDIDO_THREAD_H
#include <QThread>
#include <QDateTime>
#include "KgGlobalData.h"

// BC DI策略值宏定义
#define BC_DI_STRATEGY_CONF_SWITCH       1  // 汇流开关反馈
#define BC_DI_STRATEGY_ISOL_SWITCH       2  // 隔离开关反馈
#define BC_DI_STRATEGY_MAIN_SWITCH       3  // 主断路器反馈
#define BC_DI_STRATEGY_THUNDER           8  // 防雷采集干结点
#define BC_DI_STRATEGY_THUNDER2        108  // #2防雷采集干结点
#define BC_DI_STRATEGY_FIRE              9  // 消防采集干结点
#define BC_DI_STRATEGY_WATER            10  // 水浸采集干结点
#define BC_DI_STRATEGY_WATER2          110  // #2水浸采集干结点
#define BC_DI_STRATEGY_EMERG_STOP       11  // 急停信号采集干结点
#define BC_DI_STRATEGY_EMERG_STOP2     111  // #2急停信号采集干结点
#define BC_DI_STRATEGY_GAS              12  // 可燃气体采集干结点
#define BC_DI_STRATEGY_FUSE             13  // 熔断器采集反馈干结点
#define BC_DI_STRATEGY_FIRE_RELEASE     14  // 消防释放信号
#define BC_DI_STRATEGY_CHARGE_DRIVE     20  // 充电接触器驱动信号
#define BC_DI_STRATEGY_DISCHARGE_DRIVE  21  // 放电接触器驱动信号
#define BC_DI_STRATEGY_FIRE_WARN        22  // 消防预警信号
#define BC_DI_STRATEGY_UPS_ALARM        23  // UPS告警信号
#define BC_DI_STRATEGY_DOOR_ALARM       24  // 门禁告警信号
#define BC_DI_STRATEGY_DOOR_ALARM2      34  // 门禁告警信号2 added 2023-5-4
#define BC_DI_STRATEGY_FIRE_SPRAY       25  // 消防喷洒信号 added 2022-12-10
#define BC_DI_STRATEGY_FIRE_FAULT       26  // 消防故障 added 2022-12-21
#define BC_DI_STRATEGY_FIRE_MANUAL      27  // 消防手动/自动 added 2023-11-9
#define BC_DI_STRATEGY_POWER_OFF        30  // 市电断电 added 2023-11-9
#define BC_DI_STRATEGY_BMS_LOCAL        31  // BMS就地 added 2023-12-25
#define BC_DI_STRATEGY_BMS_REMOTE       32  // BMS远方
#define BC_DI_STRATEGY_AC_FAULT         41  // 空调机组故障 added 2024-2-3
#define BC_DI_STRATEGY_LIQUID_FAULT     42  // 液冷机组故障 added 2024-2-3
#define BC_DI_STRATEGY_RES1             51  // 备用信号1 added 2023-8-19
#define BC_DI_STRATEGY_RES2             52  // 备用信号2
#define BC_DI_STRATEGY_RES3             53  // 备用信号3
#define BC_DI_STRATEGY_RES4             54  // 备用信号4
#define BC_DI_STRATEGY_RES5             55  // 备用信号5
#define BC_DI_STRATEGY_RES6             56  // 备用信号6
#define BC_DI_STRATEGY_RES7             57  // 备用信号7
#define BC_DI_STRATEGY_RES8             58  // 备用信号8
#define BC_DO_STRATEGY_ADDR_ALLOC       81  // BCMU地址分配 added 2024-11-20
#define BC_DO_STRATEGY_FAN              25  // 风扇控制 added 2024-11-20

// 交流断路器脱扣策略值 added 2024-11-20
#define BC_DO_STRATEGY_TRIP_SWITCH     102 // 断路器脱扣 added 2024-10-26
#define BC_DO_STRATEGY_AC_TRIP_SWITCH   103 // 交流断路器脱扣
#define BC_DO_STRATEGY_AC_TRIP_SWITCH2  109 // 交流断路器脱扣2
#define BC_DO_STRATEGY_AC_TRIP_SWITCH3  110 // 交流断路器脱扣3

class CBattStack;
//#define WTGZ_PRJ // 威腾广州【002003476】BA10-V2.0.0
// BC DI策略值宏定义
// added 2024-11-20 // 处理BC的DI,DO,有延时处理,需要单独开一个线程
// 【002003357】安徽昆宇河北英利项目 先跳汇流开关，再脱扣BC的DOB
class BcDiDoThread : public QThread
{
	Q_OBJECT
public:	
	BcDiDoThread(QObject *parent);
	~BcDiDoThread();
    // BCMU地址分配相关函数

public:
	void run();

private:
    void dealwithBCDIState(CBattStack *pStack);
	void dealwithBCDOState();
	int  getBCDIValue(CBattBank *pBank, int diIndex);
    void waitConfSwitchBreaked();
    // 检查是否有BCMU地址分配的触发条件
     void checkBcmuAddressAllocTrigger();

      // 操作第一个BCMU的DO以触发地址分配
     void triggerBcmuAddressAlloc();
private:
    char m_bcDiOldState[30][50];
	char m_bcResDiOldState[30][10];
	int  m_printCount;
	int  m_bcDoLogCount;
	int  m_runCount;

	int m_oldCtrlFanState[30];
	int m_closeFanReqCount[30];
	QDateTime m_closeReqStartTime[30];

    // 地址分配请求标志
    int m_bcmuAddrAllocReq;
        // 上次BCMU连接故障状态，用于检测变化
    char m_lastBcmuConnFault[30];


};

#endif // BCDIDO_THREAD_H
